# This is a sample Python script.
import numpy as np 		#导入NumPy工具包
import cv2
# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.


def newArray():
    n1 = np.array([1, 2, 3])  # 创建一个简单的一维数组
    n2 = np.array([0.1, 0.2, 0.3])  # 创建一个包含小数的一维数组
    n3 = np.array([[1, 2], [3, 4]])  # 创建一个简单的二维数组
    print(f'n1: {n1},\nn2: {n2}\nn3: {n3}')  # Press Ctrl+F8 to toggle the breakpoint.

def chDtype():
    lst = [1, 2, 3]  # 列表
    # 创建浮点型数组
    n1 = np.array(lst, dtype=np.float_)
    # 或者
    #n1 = np.array(lst, dtype=float)
    print(n1)
    print(n1.dtype)

def new3DArray():
    nd1 = [1, 2, 3]
    nd2 = np.array(nd1, ndmin=3)  # 三维数组
    print(nd2)

def newZeros():
    n = np.zeros((3, 3), np.uint8)
    print(n)

def newOnes():
    n = np.ones((3, 3), np.uint8)
    print(n)

def newRandom():
    n1 = np.random.randint(1, 3, 10)
    print(f'随机生成10个1到3之间且不包括3的整数：{n1}')
    n2 = np.random.randint(5, 10)
    print(f'size数组大小为空随机返回一个整数：{n2}')
    n3 = np.random.randint(5, size=(2, 5))
    print(f'随机生成5以内二维数组:{n3}')

def arrCopy():
    n1 = np.array([1, 2])  # 创建一维数组
    n2 = n1.copy()  # 创建复制第一个数组
    print(n1 == n2)  # 比较两个数组是否相同
    n2[0] = 9  # 副本数组修改第一个元素
    print(n1)  # 输出两个数组的元素值
    print(n2)
    print(n1 == n2)  # 比较两个数组是否相同

def arrSlice():
    n = np.arange(0, 10)
    print(n)
    print(n[:3])  # 1 2
    print(n[3:6])  # 3 4 5
    print(n[6:])  # 6 7 8 9
    print(n[::])  # 0 1 2 3 4 5 6 7 8 9
    print(n[:])  # 1 2 3 4 5 6 7 8 9
    print(n[::2])  # 0 2 4 6 8
    print(n[1::5])  # 1 6
    print(n[2::6])  # 2 8
    # start、stop、step为负数时
    print(n[::-1])  # 9 8 7 6 5 4 3 2 1 0
    print(n[:-3:-1])  # 9 8
    print(n[-3:-5:-1])  # 7 6
    print(n[-5::-1])  # 5 4 3 2 1 0


def arr2DSlice():
    n = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    print(n[:2, 1:])
    print(n[1, :2])
    print(n[:2, 2])
    print(n[:, :1])

def createImg():
    width = 200  # 图像的宽
    height = 100  # 图像的高
    # 创建指定宽高、单通道、像素值都为0的图像
    img = np.zeros((height, width), np.uint8)
    img[:, :] = 255
    #img = np.ones((height, width), np.uint8) * 255 # 与上一句效果相同
    cv2.imshow("img", img)  # 展示图像
    cv2.waitKey()  # 按下任何键盘按键后
    cv2.destroyAllWindows()  # 释放所有窗体

def createRandomImg():
    width = 200  # 图像的宽
    height = 100  # 图像的高
    # 创建指定宽高、单通道、随机像素值的图像，随机值在0~256之间，数字为无符号8位整数
    img = np.random.randint(256, size=(height, width), dtype=np.uint8)
    cv2.imshow("img", img)  # 展示图像
    cv2.waitKey()  # 按下任何键盘按键后
    cv2.destroyAllWindows()  # 释放所有窗体

def imgConnect():
    width = 200  # 图像的宽
    height = 100  # 图像的高
    # 创建指定宽高、单通道、随机像素值的图像，随机值在0~256之间，数字为无符号8位整数
    img = np.random.randint(256, size=(height, width), dtype=np.uint8)
    img_h = np.hstack((img, img))  # 水平拼接两个图像
    img_v = np.vstack((img, img))  # 垂直拼接两个图像
    cv2.imshow("img_h", img_h)  # 展示拼接之后的效果
    cv2.imshow("img_v", img_v)
    cv2.waitKey()  # 按下任何键盘按键后
    cv2.destroyAllWindows()  # 释放所有窗体

# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    #newArray()
    #chDtype()
    #new3DArray()
    #newZeros()
    #newOnes()
    #newRandom()
    #arrCopy()
    #arrSlice()
    #arr2DSlice()
    #createRandomImg()
    imgConnect()
